package com.ruoyi.syf.common.constant;

/**
 * 定时任务策略类型
 *      注：以下注释中的yyyy-MM-dd HH:mm:ss非时间格式，而是代表非确定时间，各个字母代表常数
 */
public abstract class TaskType {

    /**
     * 单次(目前不使用)
     *
     * 指定执行时间，只执行一次
     */
    public final static String ONE = "one";

    /**
     * 每日
     *
     * 指定执行时间，每日执行一次
     */
    public final static String DAILY = "daily";

    /**
     * 每月(目前不使用)
     *
     * 指定执行时间，每月执行一次
     */
    public final static String MONTHLY = "monthly";

    /**
     * 每年(目前不使用)
     *
     * 指定执行时间，每年执行一次
     */
    public final static String ANNUALLY = "annually";

    /**
     * 工作日
     *
     * 指定执行时间，工作日每日执行一次
     */
    public final static String WEEKDAYS = "weekdays";

    /**
     * 节假日
     *
     * 指定执行时间，节假日每日执行一次
     */
    public final static String HOLIDAY = "holiday";

    /**
     * 自定义1（简单递增类型）
     *
     * 下一周期的执行时间 = 本次周期的执行时间加 + 周期时间
     *      即任务开始时间为 yyyy-MM-dd HH:mm:ss 周期为n小时
     *      则下一周期执行时间为 yyyy-MM-dd (HH+n):mm:ss
     *      同理，如果周期为n天 则下一周期执行时间为 yyyy-MM-(dd+n) HH:mm:ss
     *
     * 示例
     *
     * 任务开始时间              周期      第二次执行时间              第三次执行时间
     *
     * 2023-09-21 15:00:00      2小时     2023-09-21 17:00:00       2023-09-21 19:00:00
     *
     * 2023-09-21 15:00:00      5小时     2023-09-21 20:00:00       2023-09-22 01:00:00
     *
     * 2023-09-21 15:00:00      7天       2023-09-28 15:00:00       2023-10-05 15:00:00
     */
    public final static String INCREMENTAL = "incremental";

    /**
     * 自定义2（强指定开始时间类型）(目前不使用)
     *
     * 如果任务开始时间为 yyyy-MM-dd 15:mm:ss 周期为n小时
     *      下一周期的执行时间的小时位的数必须大于15，如 15+n, 15+n+n
     *      如果 计算得出的小时位大于24，则下一周期时间为 yyyy-MM-(dd+1) HH:mm:ss 即上一位(小时位的上一位为天位)加1，本位(此处为小时位)不变
     *      计算过程如下
     *      --> yyyy-MM-dd 15:mm:ss 周期为5小时
     *          第二次执行时间： yyyy-MM-dd (15+5):mm:ss --> yyyy-MM-dd 20:mm:ss
     *          第三次执行时间： yyyy-MM-dd (20+5):mm:ss --> yyyy-MM-(dd+1) 01:mm:ss
     *                          --> 因为01小于初始时间的15，则小时位设为15,最终得到 yyyy-MM-(dd+1) 15:mm:ss
     *
     * 示例
     *
     * 任务开始时间              周期      第二次执行时间              第三次执行时间
     *
     * 2023-09-21 15:00:00      2小时     2023-09-21 17:00:00       2023-09-21 19:00:00
     *
     * 2023-09-21 15:00:00      5小时     2023-09-21 20:00:00       2023-09-22 15:00:00
     *
     * 2023-09-21 15:00:00      7天       2023-09-28 15:00:00       2023-10-21 15:00:00
     */
    public final static String APPOINT = "appoint";

}
